import { ProbeEvent, ProbeEventList } from "./EventList";

/**
 * 属性
 * 带有属性变化的事件钩子
 */
export default class EventProp<T>
{
    private value : T;
    
    /**
     * 值即将变化时触发钩子
     * 事件参数：value旧值
     */
    public ValueChanging : ProbeEventList = new ProbeEventList()
    /**
     * 值变化时触发钩子
     * 事件参数：value新值
     */
    public ValueChanged : ProbeEventList = new ProbeEventList()

    public get Value() : T {
        return this.value;
    }

    public set Value(v : T) {
        this.ValueChanging.DoEvent(this.value);
        this.value = v;
        this.ValueChanged.DoEvent(this.value);
    }
    
    /**
     * 初始化值，不会触发事件
     * @param v 
     */
    public InitValue(v : T){
        this.value = v;
    }

    public ClearFunc()
    {
        this.ValueChanged.Clear();
        this.ValueChanging.Clear();
    }
    
}